﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace ESpace
{
    public class ESettings
    {
        Dictionary<string, string> dl = new Dictionary<string, string>();

        String fPath = "";

        public ESettings(String fPath)
        {
            this.fPath = fPath;
            LoadSettings();
        }

        void LoadSettings()
        {
            try
            {
                dl.Clear();
                if (!File.Exists(fPath))
                {
                    SaveSettings();
                    return;
                }

                String[] sl = File.ReadAllLines(fPath, Encoding.Default);
                for (int i = 0; i < sl.Length; i++)
                {
                    String[] s = sl[i].Split('=');
                    if (s.Length != 2) return;
                    String k = s[0].Trim();
                    String v = s[1].Trim();
                    if (k == "") return;

                    dl.Add(k, v);

                }
                SaveSettings();
            }
            catch (Exception ex) { throw new Exception("Ошибка загрузки настроек: " + ex.Message); }
        }

        void SaveSettings()
        {
            String[] sl = new String[dl.Count];
            int i = 0;
            foreach (KeyValuePair<string, string> kvp in dl)
            {
                sl[i] = kvp.Key + "=" + kvp.Value;
                i++;
            }
            File.WriteAllLines(fPath, sl, Encoding.Default);

        }

        public bool RemoveSettings(String key) 
        { 
            bool b =dl.Remove(key);
            if (b) SaveSettings();
            return b;
        }

        public void SetSettings(String key, String val)
        {
            try
            {
                bool bSave = dl[key] != val;
                dl[key] = val;
               if (bSave) SaveSettings();
            }
            catch
            {
                dl.Add(key, val);
                SaveSettings();
            }
        }

        /// <summary>
        ///  если настройка не находится, она будет создана и сохранениа с дефолтным значением
        /// </summary>
        public String GetSettings(String key, String DefaultValue)
        {
            try
            {
                return dl[key];
            }
            catch 
            {
                dl.Add(key, DefaultValue);
                SaveSettings();
                return DefaultValue; 
            }
        }

        public bool Exsist(String key)
        {
            foreach (KeyValuePair<string, string> kvp in dl)
            {
                if (kvp.Key == key) return true;
            }
            return false;
        }

        public int Count { get { return dl.Count; } }

    }
}
